home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d27 / modjobd.arc / MODJOBD.ASM < prev    next >
Assembly Source File  |  1991-12-04  |  16KB  |  452 lines

  1. /********************************************************************/
  2. /*                                                                  */
  3. /*   (C) Copyright 1986 Mike Hoyes                                  */
  4. /*                                                                  */
  5. /*   Title       : MODJOBDA                                         */
  6. /*   Author      : Mike Hoyes                                       */
  7. /*   Date Written: January 1986                                     */
  8. /*                                                                  */
  9. /*   Modify Job Description                                         */
  10. /*                                                                  */
  11. /********************************************************************/
  12.          TITLE 'MODIFY JOB DESCRIPTION INFORMATION';
  13.          SPACE;
  14.          /* PARAMETERS PASSED TO PROGRAM */
  15.          SPACE;
  16.          DCL SPCPTR P.JOBD PARM;
  17.          DCL OL PLIST(P.JOBD) PARM EXT;
  18.          DCL DD PASS CHAR(20) BAS(P.JOBD);
  19.          DCL DD JOBD CHAR(10);
  20.          DCL DD LIB CHAR(10);
  21.          SPACE 2;
  22.          /* OPERAND FOR RSLVSP FOR JOBD NAME */
  23.          SPACE;
  24.          DCL DD OBJ CHAR(34);
  25.          DCL DD OTYPE CHAR(2) DEF(OBJ) INIT(X'1903');
  26.          DCL DD ONAME CHAR(30) DEF(OBJ) POS(3) INIT;
  27.          DCL DD OATHR CHAR(2) DEF(OBJ) POS(33) INIT(X'0000');
  28.          SPACE 2;
  29.          /* OPERAND FOR RSLVSP FOR LIBRARY NAME */
  30.          SPACE;
  31.          DCL DD CNTX CHAR(34);
  32.          DCL DD CTYPE CHAR(2) DEF(CNTX) INIT(X'0401');
  33.          DCL DD CNAME CHAR(30) DEF(CNTX) POS(3) INIT;
  34.          DCL DD CATHR CHAR(2) DEF(CNTX) POS(33) INIT(X'0800');
  35.          SPACE 2;
  36.          /* BASE COMMUNICATIONS OBJECT */
  37.          SPACE;
  38.          DCL SPC WCB BASPCO;
  39.          DCL PTR SEPT@ DEF(WCB) POS(1);
  40.          DCL PTR SEPT(1050) BAS(SEPT@);
  41.          DCL SYSPTR QTEMP DEF(WCB) POS(65);
  42.          SPACE 2;
  43.          /* POINTERS AND VARIABLES IN JOBD SPACE */
  44.          SPACE;
  45.          DCL SYSPTR CTX;
  46.          DCL SYSPTR SPACE;
  47.          DCL SPCPTR PSPACE;
  48.          DCL DD AREA CHAR(864) BAS(PSPACE);
  49.          DCL DD USRPRF CHAR(10) BAS(PSPACE) POS(3);
  50.          DCL DD JOBQ1 CHAR(10) BAS(PSPACE) POS(13);
  51.          DCL DD JOBQ2 CHAR(10) BAS(PSPACE) POS(23);
  52.          DCL DD JOBQPR CHAR(1) BAS(PSPACE) POS(33);
  53.          DCL DD OUTQPR CHAR(1) BAS(PSPACE) POS(34);
  54.          DCL DD RTGDTA CHAR(80) BAS(PSPACE) POS(35);
  55.          DCL DD SYNTAX BIN(2) BAS(PSPACE) POS(119);
  56.          DCL DD CNLSEV BIN(2) BAS(PSPACE) POS(121);
  57.          DCL DD LOGLVL CHAR(1) BAS(PSPACE) POS(123);
  58.          DCL DD MSGSEV BIN(2) BAS(PSPACE) POS(124);
  59.          DCL DD MSGTXT CHAR(1) BAS(PSPACE) POS(126);
  60.          DCL DD OUTQ1 CHAR(10) BAS(PSPACE) POS(127);
  61.          DCL DD OUTQ2 CHAR(10) BAS(PSPACE) POS(137);
  62.          DCL DD HOLD CHAR(1) BAS(PSPACE) POS(147);
  63.          DCL DD JOBDAT CHAR(7) BAS(PSPACE) POS(148);
  64.          DCL DD JOBSWS CHAR(8) BAS(PSPACE) POS(155);
  65.          DCL DD INQMSG CHAR(1) BAS(PSPACE) POS(163);
  66.          DCL DD ACGCD CHAR(15) BAS(PSPACE) POS(164);
  67.          DCL DD CNT BIN(2) BAS(PSPACE) POS(307);
  68.          DCL DD LIBS(25) CHAR(10) BAS(PSPACE) POS(309);
  69.          DCL DD RQSDTA CHAR(255) BAS(PSPACE) POS(609);
  70.          SPACE 2;
  71.          /* PROGRAM VARIABLES */
  72.          SPACE;
  73.          DCL DD CMD CHAR(768) INIT('CHGJOBD ?*JOBD(');
  74.          DCL DD I BIN(4);
  75.          DCL DD J BIN(4);
  76.          DCL DD K BIN(4);
  77.          DCL DD CMDLEN PKD(15,5);
  78.          DCL DD LINE CHAR(15);
  79.          DCL DD BIN4 CHAR(7) INIT(X'02000F00000000');
  80.          DCL DD BINLEN CHAR(1) DEF(BIN4) POS(3);
  81.          DCL DD *IN01 CHAR(1) INIT('0');
  82.          SPACE 2;
  83.          /* PARAMETERS FOR QCAEXEC CALL */
  84.          SPACE;
  85.          DCL SPCPTR P.CMD INIT(CMD);
  86.          DCL SPCPTR P.CMDLEN INIT(CMDLEN);
  87.          DCL OL EXECLST(P.CMD,P.CMDLEN) ARG;
  88.          SPACE 2;
  89.          /* PARAMETERS FOR QMHSNPGM CALL */
  90.          SPACE;
  91.          DCL DD MSG CHAR(255);
  92.          DCL DD * BIN(2) DEF(MSG) POS(1) INIT(1);
  93.          DCL DD * CHAR(253) DEF(MSG) POS(3) INIT;
  94.          DCL DD MSGID CHAR(7) INIT('CPF9898');
  95.          DCL DD MSGF CHAR(20) INIT('QCPFMSG   QSYS');
  96.          DCL DD MSGDTA CHAR(255);
  97.          DCL DD * CHAR(1) DEF(MSGDTA) POS(1) INIT('E');
  98.          DCL DD DTALEN BIN(2) DEF(MSGDTA) POS(2) INIT(27);
  99.          DCL DD V1 CHAR(252) DEF(MSGDTA) POS(4) INIT;
  100.          DCL DD PGMQ CHAR(18) INIT(X'000202D7D9C5E5075C40');
  101.          DCL DD MSGQ CHAR(22) INIT(X'00015CE3D6D7C7D4D8');
  102.          DCL DD MSGTYP CHAR(6) INIT('ESCP  ');
  103.          DCL SPCPTR P.1 INIT(MSG);
  104.          DCL SPCPTR P.2 INIT(MSGID);
  105.          DCL SPCPTR P.3 INIT(MSGF);
  106.          DCL SPCPTR P.4 INIT(MSGDTA);
  107.          DCL SPCPTR P.5 INIT(PGMQ);
  108.          DCL SPCPTR P.6 INIT(MSGQ);
  109.          DCL SPCPTR P.7 INIT(MSGTYP);
  110.          DCL SPCPTR P.8;
  111.          DCL SPCPTR P.9;
  112.          DCL OL MSGLST(P.1,P.2,P.3,P.4,P.5,P.6,P.7,P.8,P.9) ARG;
  113.          SPACE 2;
  114.          /* PARAMETERS FOR INTERNAL CALL */
  115.          SPACE;
  116.          DCL DD LEN BIN(4);
  117.          DCL SPCPTR STRING;
  118.          DCL SPCPTR LENGTH INIT(LEN);
  119.          DCL OL MLIST(STRING,LENGTH);
  120.          DCL INSPTR RTNPTR;
  121.          SPACE 2;
  122.          /* EXCEPTION MONITORS */
  123.          SPACE;
  124.          DCL EXCM * IMD BP(.CNL) CV('CPF') EXCID(H'6801');
  125.          DCL EXCM E1 IMD BP(.ERR) CV('CPF') EXCID(H'0000');
  126.          SPACE 3;
  127.          ENTRY *(PLIST) EXT;
  128.          CPYBLA JOBD,PASS(1:10);
  129.          CPYBLA LIB,PASS(11:10);
  130.          CPYNV J,16;
  131.          CPYBLA ONAME,JOBD;
  132.          SPACE;
  133. /* Check for library name */
  134.          CMPBLA(B) LIB,'*LIBL'/EQ(.NOLIB);
  135.          CMPBLA(B) LIB,'QTEMP     '/EQ(.TEMP) /*QTEMP cannot be resolved
  136.                                                 by name*/;
  137.          BRK 'RSLVLIB';
  138.          CPYBLA CNAME,LIB;
  139.          RSLVSP CTX,CNTX,*,*;
  140.          B .SKP;
  141.          SPACE;
  142. /* Set context pointer to QTEMP if selected */
  143. .TEMP:   CPYBWP CTX,QTEMP;
  144.          SPACE;
  145. /* Resolve system pointer for Job Description in library specified */
  146. .SKP:    RSLVSP SPACE,OBJ,CTX,*;
  147.          B .CONT;
  148.          BRK 'RSLVOBJ';
  149.          SPACE;
  150. /* Resolve system pointer for job Description in *LIBL */
  151. .NOLIB:  RSLVSP SPACE,OBJ,*,*;
  152.          SPACE;
  153. /* Set space pointer to Job Description space */
  154. .CONT:   SETSPPFP PSPACE,SPACE;
  155.          BRK 'JOBD';
  156.          SPACE;
  157. /* Add job description name to command string */
  158.          SETSPP STRING,JOBD;
  159.          CPYNV LEN,10;
  160.          CALLI MOVSTR,MLIST,RTNPTR;
  161.          CPYBLA CMD(J:1),'.';
  162.          ADDN(S) J,1;
  163.          SETSPP STRING,LIB;
  164.          CPYNV LEN,10;
  165.          CALLI MOVSTR,MLIST,RTNPTR;
  166.          CPYBLA CMD(J:9),') ??USER(';
  167.          ADDN(S) J,9;
  168.          BRK 'USER';
  169.          SPACE;
  170. /* Add user profile to command string */
  171.          SETSPP STRING,USRPRF;
  172.          CPYNV LEN,10;
  173.          CALLI MOVSTR,MLIST,RTNPTR;
  174.          CPYBLA CMD(J:9),') ??JOBQ(';
  175.          ADDN(S) J,9;
  176.          BRK 'JOBQ';
  177.          SPACE;
  178. /* Add Job queue to command string */
  179.          SETSPP STRING,JOBQ1;
  180.          CPYNV LEN,10;
  181.          CALLI MOVSTR,MLIST,RTNPTR;
  182.          CPYBLA CMD(J:1),'.';
  183.          ADDN(S) J,1;
  184.          SETSPP STRING,JOBQ2;
  185.          CPYNV LEN,10;
  186.          CALLI MOVSTR,MLIST,RTNPTR;
  187.          CPYBLA CMD(J:11),') ??JOBPTY(';
  188.          ADDN(S) J,11;
  189.          BRK 'JOBPTY';
  190.          SPACE;
  191. /* Add Job queue priority to command string */
  192.          CPYBLA CMD(J:1),JOBQPR;
  193.          ADDN(S) J,1;
  194.          CPYBLA CMD(J:11),') ??OUTPTY(';
  195.          ADDN(S) J,11;
  196.          BRK 'OUTPTY';
  197.          SPACE;
  198. /* Add Out queue priority to command string */
  199.          CPYBLA CMD(J:1),OUTQPR;
  200.          ADDN(S) J,1;
  201.          CPYBLA CMD(J:11),') ??ACGCDE(';
  202.          ADDN(S) J,11;
  203.          BRK 'ACGCDE';
  204.          SPACE;
  205. /* Add Accounting code to command string */
  206.          CMPBLA(B) ACGCD,'               '/EQ(.NOACG);
  207.          CPYBLA CMD(J:1),X'7D';
  208.          ADDN(S) J,1;
  209.          SETSPP STRING,ACGCD;
  210.          CPYNV LEN,15;
  211.          CALLI TRCSTR,MLIST,RTNPTR;
  212.          CPYBLA CMD(J:1),X'7D';
  213.          ADDN(S) J,1;
  214.          B .ACGCNT;
  215. .NOACG:  CPYBLA CMD(J:6),'*BLANK';
  216.          ADDN(S) J,6;
  217. .ACGCNT: CPYBLA CMD(J:11),') ??RTGDTA(';
  218.          ADDN(S) J,11;
  219.          BRK 'RTGDTA';
  220.          SPACE;
  221. /* Add Routing data to command string */
  222.          CMPBLA(B) RTGDTA,'*GET'/EQ(.SK1);
  223.          CMPBLA(B) RTGDTA,'*RQSDTA'/EQ(.SK1);
  224.          CPYBLA CMD(J:1),X'7D';
  225.          ADDN(S) J,1;
  226. .SK1:    SETSPP STRING,RTGDTA;
  227.          CPYNV LEN,80;
  228.          CALLI TRCSTR,MLIST,RTNPTR;
  229.          CMPBLA(B) RTGDTA,'*GET'/EQ(.SK2);
  230.          CMPBLA(B) RTGDTA,'*RQSDTA'/EQ(.SK2);
  231.          CPYBLA CMD(J:1),X'7D';
  232.          ADDN(S) J,1;
  233. .SK2:    CPYBLA CMD(J:11),') ??RQSDTA(';
  234.          ADDN(S) J,11;
  235.          BRK 'RQSDTA';
  236.          SPACE;
  237. /* Add Request data to command string */
  238.          CMPBLA(B) RQSDTA,'*NONE'/EQ(.SK3);
  239.          CMPBLA(B) RQSDTA,'*RTGDTA'/EQ(.SK3);
  240.          CPYBLA CMD(J:1),X'7D';
  241.          ADDN(S) J,1;
  242. .SK3:    SETSPP STRING,RQSDTA;
  243.          CPYNV LEN,255;
  244.          CALLI TRCSTR,MLIST,RTNPTR;
  245.          CMPBLA(B) RQSDTA,'*NONE'/EQ(.SK4);
  246.          CMPBLA(B) RQSDTA,'*RTGDTA'/EQ(.SK4);
  247.          CPYBLA CMD(J:1),X'7D';
  248.          ADDN(S) J,1;
  249. .SK4:    CPYBLA CMD(J:11),') ??SYNTAX(';
  250.          ADDN(S) J,11;
  251.          BRK 'SYNTAX';
  252.          SPACE;
  253. /* Add Syntax severity to command string */
  254.          CMPNV(B) SYNTAX,-1/EQ(.NOSYN);
  255.          CPYBLA BINLEN,X'02';
  256.          CVTNC LINE,SYNTAX,BIN4;
  257.          CPYBLA CMD(J:2),LINE(1:2);
  258.          ADDN(S) J,2;
  259.          B .SYNCNT;
  260. .NOSYN:  CPYBLA CMD(J:6),'*NOCHK';
  261.          ADDN(S) J,6;
  262. .SYNCNT: CPYBLA CMD(J:12),') ??INLLIBL(';
  263.          ADDN(S) J,12;
  264.          BRK 'INLLIBL';
  265.          SPACE;
  266. /* Add Initial Library list to command string */
  267.          CMPNV(B) CNT,-1/EQ(.SYSLIB);
  268.          CMPNV(B) CNT,0/EQ(.NOTLIB);
  269.          CPYNV K,1;
  270. .LIBLP:  SETSPP STRING,LIBS(K);
  271.          CPYNV LEN,10;
  272.          CALLI MOVSTR,MLIST,RTNPTR;
  273.          ADDN(S) J,1;
  274.          ADDN(S) K,1;
  275.          CMPNV(B) K,CNT/NHI(.LIBLP);
  276.          B .LIBCNT;
  277. .NOTLIB: CPYBLA CMD(J:5),'*NONE';
  278.          ADDN(S) J,5;
  279.          B .LIBCNT;
  280. .SYSLIB: CPYBLA CMD(J:7),'*SYSVAL';
  281.          ADDN(S) J,7;
  282. .LIBCNT: CPYBLA CMD(J:11),') ??CNLSEV(';
  283.          ADDN(S) J,11;
  284.          BRK 'CNLSEV';
  285.          SPACE;
  286. /* Add Cancel severity to command string */
  287.          CPYBLA BINLEN,X'02';
  288.          CVTNC LINE,CNLSEV,BIN4;
  289.          CPYBLA CMD(J:2),LINE(1:2);
  290.          ADDN(S) J,2;
  291.          CPYBLA CMD(J:8),') ??LOG(';
  292.          ADDN(S) J,8;
  293.          BRK 'LOG';
  294.          SPACE;
  295. /* Add Log levels to command string */
  296.          CPYBLA CMD(J:1),LOGLVL;
  297.          ADDN(S) J,2;
  298.          CPYBLA BINLEN,X'02';
  299.          CVTNC LINE,MSGSEV,BIN4;
  300.          CPYBLA CMD(J:2),LINE(1:2);
  301.          ADDN(S) J,3;
  302.          CMPBLA(B) MSGTXT,'M'/NEQ(.NXT1);
  303.          CPYBLA CMD(J:4),'*MSG';
  304.          ADDN(S) J,4;
  305. .NXT1:   CMPBLA(B) MSGTXT,'S'/NEQ(.NXT2);
  306.          CPYBLA CMD(J:7),'*SECLVL';
  307.          ADDN(S) J,7;
  308. .NXT2:   CMPBLA(B) MSGTXT,'N'/NEQ(.NXT3);
  309.          CPYBLA CMD(J:7),'*NOLIST';
  310.          ADDN(S) J,7;
  311. .NXT3:   CPYBLA CMD(J:14),') ??INQMSGRPY(';
  312.          ADDN(S) J,14;
  313.          BRK 'INQMSGRPY';
  314.          SPACE;
  315. /* Add Inquire Message Reply to command string */
  316.          CMPBLA(B) INQMSG,X'00'/NEQ(.INQ1);
  317.          CPYBLA CMD(J:4),'*RQD';
  318.          ADDN(S) J,4;
  319. .INQ1:   CMPBLA(B) INQMSG,X'01'/NEQ(.INQ2);
  320.          CPYBLA CMD(J:4),'*DFT';
  321.          ADDN(S) J,4;
  322. .INQ2:   CMPBLA(B) INQMSG,X'02'/NEQ(.INQ3);
  323.          CPYBLA CMD(J:8),'*SYSRPYL';
  324.          ADDN(S) J,8;
  325. .INQ3:   CPYBLA CMD(J:9),') ??OUTQ(';
  326.          ADDN(S) J,9;
  327.          BRK 'OUTQ';
  328.          SPACE;
  329. /* Add Out Queue to command string */
  330.          SETSPP STRING,OUTQ1;
  331.          CPYNV LEN,10;
  332.          CALLI MOVSTR,MLIST,RTNPTR;
  333.          CPYBLA CMD(J:1),'.';
  334.          ADDN(S) J,1;
  335.          SETSPP STRING,OUTQ2;
  336.          CPYNV LEN,10;
  337.          CALLI MOVSTR,MLIST,RTNPTR;
  338.          CPYBLA CMD(J:9),') ??HOLD(';
  339.          ADDN(S) J,9;
  340.          BRK 'HOLD';
  341.          SPACE;
  342. /* Add Hold option to command string */
  343.          CMPBLA(B) HOLD,'N'/NEQ(.NXT4);
  344.          CPYBLA CMD(J:3),'*NO';
  345.          ADDN(S) J,3;
  346. .NXT4:   CMPBLA(B) HOLD,'Y'/NEQ(.NXT5);
  347.          CPYBLA CMD(J:4),'*YES';
  348.          ADDN(S) J,4;
  349. .NXT5:   CPYBLA CMD(J:9),') ??DATE(';
  350.          ADDN(S) J,9;
  351.          BRK 'DATE';
  352.          SPACE;
  353. /* Add Job Date to command string */
  354.          CMPBLA(B) JOBDAT,'0010000'/EQ(.NXT6);
  355.          CPYBLA CMD(J:4),JOBDAT(4:4);
  356.          ADDN(S) J,4;
  357.          CPYBLA CMD(J:2),JOBDAT(2:2);
  358.          ADDN(S) J,2;
  359.          B .NXT7;
  360. .NXT6:   CPYBLA CMD(J:7),'*SYSVAL';
  361.          ADDN(S) J,7;
  362. .NXT7:   CPYBLA CMD(J:8),') ??SWS(';
  363.          ADDN(S) J,8;
  364.          BRK 'SWS';
  365.          SPACE;
  366. /* Add Job switchs to command string */
  367.          CPYBLA CMD(J:8),JOBSWS;
  368.          ADDN(S) J,8;
  369.          CPYBLA CMD(J:10),') ??TEXT()';
  370.          ADDN(S) J,10;
  371.          BRK 'EXEC';
  372.          SPACE;
  373. /* Execute the command string */
  374.          CPYNV CMDLEN,J;
  375.          CALLX SEPT(276),EXECLST,*;
  376.          B .OK;
  377.          SPACE;
  378. /* Branch point if CF1 pressed in QCAEXEC */
  379. .CNL:    MODEXCPD E1,X'2000',X'01';
  380.          CPYBLA MSGID,'CPF6801';
  381.          CPYNV DTALEN,1;
  382.          CALLX SEPT(899),MSGLST,*;
  383.          B .END;
  384.          SPACE;
  385. /* Branch point for any errors that occur */
  386. .ERR:    MODEXCPD E1,X'2000',X'01';
  387.          CPYBLA MSGID,'CPF9899';
  388.          CPYNV DTALEN,1;
  389.          CALLX SEPT(899),MSGLST,*;
  390.          B .END;
  391.          SPACE;
  392. /* Send a message indicating Job Description changed */
  393. .OK:     MODEXCPD E1,X'2000',X'01';
  394.          CPYBLA MSGID,'CPC1612';
  395.          CPYNV DTALEN,20;
  396.          CPYBLA V1(1:10),JOBD;
  397.          CPYBLA V1(11:10),LIB;
  398.          CPYBLA MSGTYP,'COMP';
  399.          CALLX SEPT(899),MSGLST,*;
  400.          BRK 'END';
  401.          SPACE;
  402. /* End of the program */
  403. .END:    DEACTPG *;
  404.          RTX *;
  405.          EJECT;
  406. /*                                                                  */
  407. /*  Move a string from ST to CMD until first blank or number of     */
  408. /*  characters = LN                                                 */
  409. /*                                                                  */
  410.          BRK 'MOVDCL';
  411.          DCL SPCPTR P.ST PARM;
  412.          DCL SPCPTR P.LN PARM;
  413.          DCL OL MOVLST(P.ST,P.LN) PARM;
  414.          DCL DD ST CHAR(512) BAS(P.ST);
  415.          DCL DD LN BIN(4) BAS(P.LN);
  416.          SPACE 3;
  417.          ENTRY MOVSTR(MOVLST);
  418.          BRK 'MOVE';
  419.          CPYNV I,1;
  420. .LP:     CMPBLA(B) ST(I:1),' '/EQ(.ENDLP);
  421.          CPYBLA CMD(J:1),ST(I:1);
  422.          CPYBLA *IN01,'0';
  423.          ADDN(S) J,1;
  424. .REP:    ADDN(S) I,1;
  425.          CMPNV(B) I,LN/NHI(.LP);
  426. .RTN:    CPYBLA *IN01,'0';
  427.          B RTNPTR;
  428. .ENDLP:  CMPBLA(B) *IN01,'1'/EQ(.REP);
  429.          B RTNPTR;
  430.          EJECT;
  431. /*                                                                  */
  432. /*  Move a string from ST to CMD suppressing blanks at the end of   */
  433. /*  the line                                                        */
  434. /*                                                                  */
  435.          BRK 'TRCDCL';
  436.          DCL SPCPTR P.ST1 PARM;
  437.          DCL SPCPTR P.LN1 PARM;
  438.          DCL OL TRCLST(P.ST1,P.LN1) PARM;
  439.          DCL DD ST1 CHAR(512) BAS(P.ST1);
  440.          DCL DD LN1 BIN(4) BAS(P.LN1);
  441.          SPACE 3;
  442.          ENTRY TRCSTR(TRCLST);
  443.          BRK 'TRNC';
  444.          CPYNV I,LN1;
  445. .LP1:    CMPBLA(B) ST1(I:1),' '/NEQ(.MOVE);
  446.          SUBN(S) I,1;
  447.          CMPNV(B) I,1/HI(.LP1);
  448. .MOVE:   CPYBLA CMD(J:I),ST1(1:I);
  449.          ADDN(S) J,I;
  450.          B RTNPTR;
  451.          PEND;
  452.